package javabasics.concurrent.masterworker;

import java.util.Map;
import java.util.Queue;

/**
 * @Author suxiaoxiao
 * @Date 2019/6/16 0:43
 * @Version 1.0
 */
public class Worker implements Runnable {

    /**
     * 任务队列, 用于获取子任务
     */
    protected Queue<Object> workQueue;

    /**
     * 子任务处理结果集
     */
    protected Map<String, Object> resultMap;

    public void setWorkQueue(Queue<Object> workQueue) {
        this.workQueue = workQueue;
    }

    public void setResultMap(Map<String, Object> resultMap) {
        this.resultMap = resultMap;
    }

    /**
     * 子任务处理的逻辑，在子类中实现具体逻辑
     * @param input
     * @return
     */
    public Object handle(Object input) {
        return input;
    }

    @Override
    public void run() {
        while (true) {
            // 移除并返回头部数据
            Object input = workQueue.poll();
            if (input == null) {
                break;
            }
            Object re = handle(input);
            // 将处理结果写入结果集
            resultMap.put(Integer.toString(input.hashCode()), re);
        }
    }
}
